# list篇
# C
l_1 = [1, 2]
l_1.append(tuple('hey'))  # 列表嵌套元祖
print(l_1)
print(id(l_1))
l_2 = [{4, 5}]  # 列表中嵌套集合
l_1 = l_1 + l_2  # +改变l_1的id地址
print(l_1)
print(id(l_1))  # 改变l_1的id地址
l_3 = [6, 7]
l_1 += l_3
print(id(l_1))  # 不改变l_1的id地址
l_1 = l_1 * 2
print(l_1)
print(id(l_1))  # 列表乘id会改变
l_1 *= 2
print(l_1)
print(id(l_1))  # 列表乘等id不会改变
a = "a"
print(id(a))
l = [a] * 3
print(id(l[0]))  # 元素乘法元素id不会改变
l_1.insert(0, 0)  # 指定位置插入元素
print(l_1)
# R
print(l_1[0])  # 索引取值
l_1 = l_1[0:8]  # 切片区间取值
print(l_1)
l_1 = l_1[1::2]  # 间隔取值
print(l_1)
print(l_1.index(6))  # index
# U
l_1[0] = 'a'  # 索引赋值
print(l_1)
l_1[1:3] = 'a'  # 切片赋值
print(l_1)
# D
l_1.pop()  # 末尾删除元素
print(l_1)
print(id(l_1))
l_1.clear()  # 清空列表
print(l_1)
print(id(l_1))  # 列表id不变
l_1 = [3, 2, 1, 5, 4]
print(id(l_1))  # 重新赋值后改变id
# S
l_1.sort()  # 自动排序
print(l_1)
print(id(l_1))  # sort排序后id不变
l_5 = sorted(l_1)  # 返回新列表
print(l_5)
print(id(l_5))
l_1.reverse()
print(l_1)
print(id(l_1))  # reverse倒序后id不变
l_2 = reversed(l_5)  # 需要定义list
print(l_2)
l_2 = list(reversed(l_5))
print(l_2)
print(id(l_2))  # reversed倒序后id改变
# tuple篇
# 由于tuple不可变，不可增加、更新、删除
t_1 = (1, 'b', 3, 'a', 2, 'c')
print(t_1)
print(t_1[3])  # 索引取值
print(t_1[1::2])  # 切片取值
print(t_1.index('c'))  # index
# dict篇
# C
d_1 = {}
d_2 = {}
d_1['a'] = 1  # 键对值赋值
print(id(d_1))
d_2['2'] = "b"  # 键对值赋值
print(id(d_2))
d_1.update(d_2)
print(d_1)
print(id(d_1))  # 合并字典为合并id，被合并无
print(d_1.setdefault('2'))
d_1.setdefault('{3}', {'hey'})  # 字典嵌套集合
print(d_1)
# R
print(d_1['2'])  # 键对值访问
print(d_1.get('3'))  # 找不到返回none
print(d_1.get('d', 4))  # 返回默认值
print(d_1.keys())  # 返回所有key
print(d_1.values())  # 返回有所values
print(d_1.items())  # 返回所有键对值
# U
d_1['a'] = 100  # 键对值赋值
print(d_1)
d_1.update({'2': 200, '4': "hhh"})  # 有则更新无则添加
print(d_1)
print(d_1.pop('4'))  # 删除指定元素
print(d_1.popitem())  # 随机返回一个item
print(d_1.clear())  # 清空
# set篇
s_1 = {1, 2, }
print(s_1)
# C
s_1.add(3)  # 添加
print(s_1)
s_1.update({"a", 4})  # 批量添加
print(s_1)
# R
print('1' in s_1)
print('b' in s_1)  # 成员检测
# U
s_2 = {'b', 'c', 'd'}
s_1 = s_1.union(s_2)  # 合并set并返回新的列表
print(s_1)
# D
s_1.remove("d")  # 移除，缺失元素会报错
print(s_1)
s_1.discard(4)  # 移除，缺失元素不报错
print(s_1)
s_1.discard(6)  # 移除，缺失元素不报错
print(s_1)
print(s_1.pop())  # 无序删除并返回元素
print(s_1)
